#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <getopt.h>
#include <string.h>

#include <fonts_manager.h>
#include <encoding_manager.h>

int main(int argc, char **argv)
{   
    RegisterAllFontOpr();
    RegisterAllEncodingOpr();
    SetSupportFontForAllEncodingOpr();
    
    ShowAllFontOpr();
    ShowAllEncodingOpr();

    // 获取指定的编码操作
    EncodingOpr tEncodingOpr;
    tEncodingOpr = *GetEncodingOprByName("ascii");

    if (tEncodingOpr.name == NULL) {
    printf("Encoding not found\n");
    return -1;  // 如果没有找到编码操作，返回错误
}

    // 打印编码操作名称
    printf("Encoding: %s\n", tEncodingOpr.name);
    
    // 获取字体操作链表，并遍历打印每个字体的名称
    PFontOpr pFontOpr = tEncodingOpr.ptThisEncodingFormatCanShow;
    
    if (pFontOpr == NULL) {
        printf("No fonts found for this encoding\n");
        return -1;  // 没有字体操作，返回错误
    }

    // 遍历字体操作链表
    while (pFontOpr != NULL) {
        printf("Font: %s\n", pFontOpr->name);  // 打印字体名称
        pFontOpr = pFontOpr->ptNext;  // 移动到下一个字体操作
    }


    // 检查字符 'A' 是否能够获得Unicode编码
    unsigned char buf[] = {'A'};  // 创建一个缓冲区，包含字符 'A'
    unsigned int unicode = 0;

    // 调用 GetUnicodeFromBuffer 获取字符的Unicode编码
    int result = tEncodingOpr.GetUnicodeFromBuffer(buf, buf + sizeof(buf), &unicode);

    printf("GetUnicodeFromBuffer result: %d\n", result); // 输出返回值，检查是否成功

    if (result) {
        printf("Unicode for 'A': %u (0x%X)\n", unicode, unicode);  // 打印Unicode值
    } else {
        printf("Failed to get Unicode for 'A'\n");  // 获取Unicode失败
    }

    return 0;

}